home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / dviware / quicspool / libqmsquery / qmspag.y < prev    next >
Text File  |  1990-10-01  |  2KB  |  163 lines

  1. %{
  2. #ifndef lint
  3. static char *rcs = "$Header: qmspag.y,v 1.1 88/01/15 12:19:19 simpson Rel $";
  4. #endif
  5. /*
  6. $Log:    qmspag.y,v $
  7.  * Revision 1.1  88/01/15  12:19:19  simpson
  8.  * initial release
  9.  * 
  10.  * Revision 0.1  87/12/11  17:12:07  simpson
  11.  * beta test
  12.  * 
  13. */
  14. #include <stdio.h>
  15. #include <setjmp.h>
  16. #include <local/standard.h>
  17. #include "qms.h"
  18.  
  19. extern FILE *_Ifp, *_Ofp;
  20. extern Boolean    _FirstChar;
  21. static jmp_buf    Env;
  22. static struct qmspag    Result;
  23. %}
  24. %union {
  25.     float   r;
  26.     int        i;
  27. }
  28. %token PAG POT TMT BMT LMT RMT LPIT CPIT PROP PTT PST SOT CCT ENDLINE 
  29. %token <r> REAL 
  30. %token <i> INTEGER
  31. %type <i> orientation yesorno 'P' 'L' 'Y' 'N'
  32. %%
  33. paglines : paglines pagline | pagline ;
  34.  
  35. pagline : PAG settings ENDLINE ;
  36.  
  37. settings : settings setting optcomma | /* epsilon */ ;
  38.  
  39. setting :
  40.     POT '=' orientation 
  41.     {
  42.         Result.PO = $3;
  43.     }
  44.     |
  45.     TMT '=' INTEGER
  46.     {
  47.         Result.TM = $3;
  48.     }
  49.     |
  50.     TMT '=' REAL
  51.     {
  52.         Result.TM = $3;
  53.     }
  54.     |
  55.     BMT '=' INTEGER
  56.     {
  57.         Result.BM = $3;
  58.     }
  59.     |
  60.     BMT '=' REAL
  61.     {
  62.         Result.BM = $3;
  63.     }
  64.     |
  65.     LMT '=' INTEGER
  66.     {
  67.         Result.LM = $3;
  68.     }
  69.     |
  70.     LMT '=' REAL
  71.     {
  72.         Result.LM = $3;
  73.     }
  74.     |
  75.     RMT '=' INTEGER
  76.     {
  77.         Result.RM = $3;
  78.     }
  79.     |
  80.     RMT '=' REAL
  81.     {
  82.         Result.RM = $3;
  83.     }
  84.     |
  85.     LPIT '=' INTEGER
  86.     {
  87.         Result.LPI = $3;
  88.     }
  89.     |
  90.     LPIT '=' REAL
  91.     {
  92.         Result.LPI = $3;
  93.     }
  94.     |
  95.     CPIT '=' INTEGER
  96.     {
  97.         Result.CPI = $3;
  98.     }
  99.     |
  100.     CPIT '=' REAL
  101.     {
  102.         Result.CPI = $3;
  103.     }
  104.     |
  105.     CPIT '=' PROP
  106.     {
  107.         Result.CPI = 0;
  108.     }
  109.     |
  110.     PTT '=' INTEGER
  111.     {
  112.         Result.PT = $3;
  113.     }
  114.     |
  115.     PST '=' INTEGER
  116.     {
  117.         Result.PS = $3;
  118.     }
  119.     |
  120.     SOT '=' yesorno
  121.     {
  122.         Result.SO = $3;
  123.     }
  124.     |
  125.     CCT '=' INTEGER
  126.     {
  127.         Result.CC = $3;
  128.     }
  129.     ;
  130.     
  131. orientation : 'P' | 'L' ;
  132.  
  133. yesorno : 'Y' | 'N' ;
  134.  
  135. optcomma : ',' | /* epsilon */ ;
  136. %%
  137. #include "qmspaglex.c"
  138.  
  139. struct qmspag *qmspag()
  140. {
  141.     _FirstChar = TRUE;
  142.     fputs(QUICON, _Ofp);
  143.     fprintf(_Ofp, "%s00000", SYNTAX);
  144.     fprintf(_Ofp, "%sPAG%s", INFO, ENDCMD);
  145.     fputs(QUICOFF, _Ofp);
  146.     (void)fflush(_Ofp);
  147.     if (setjmp(Env)) {
  148.     while (timedgetc(_Ifp) != EOF)    /* Discard remaining input */
  149.         ;
  150.     return NULL;
  151.     }
  152.     if (yyparse() != 0)
  153.     return NULL;
  154.     yysptr = yysbuf;        /* Resets lex lookahead buffer */
  155.     return &Result;
  156. }
  157.  
  158. static yyerror(s)
  159. char    *s;
  160. {
  161.     longjmp(Env, TRUE);
  162. }
  163.